# REST API сервис для аутентификации и получения приватных данных

## Используемые технологии:
 - FastAPI
 - SQLalchemy
 - alembic
 - PostgreSQL
 - Docker Compose

## Требования
 - Docker Compose
 - Make


## Установка

Склонировать репозиторий и войти в папку проекта:
```bash
git clone git@hub.mos.ru:leksus/api-salary.git
cd api-salary
```

Установить переменные окружения в файле `app/.env`. Для этого можно взять пример готового файла и переименовать его:
```bash
cp app/.env_example app/.env
```
Для демонстрации работы достаточно задать только переменную `SECRET_KEY`. При желании, можно поменять и остальные переменные окружения, кроме `POSTGRES_HOST` и `POSTGRES_PORT`, так как они также прописаны в `docker-compose.yaml`.

Описание переменных окружения:
 - `SECRET_KEY` - уникальная случайная последовательность символов
 - `JWT_ALGORITHM` - алгоритм хэширования токена
 - `JWT_ACCESS_TOKEN_EXPIRES_MINUTES` - время действия выданного токена после аутентификации, в минутах

 - `POSTGRES_HOST` - имя хоста базы данных (задано как `db` в `docker-compose.yaml`)
 - `POSTGRES_PORT` - порт хоста базы данных (задано как `5432` в `docker-compose.yaml`)
 - `POSTGRES_PASSWORD` - пароль базы данных

## Запуск

Чтобы запустить сервис, выполните команду:
```bash
make runserver
```

Затем необходимо создать структуру БД:
```bash
make init_db
```

И заполнить её тестовыми данными:
```bash
make seed_db
```

Сервис будет работать по адресу [http://127.0.0.1:80](127.0.0.1:80)
Документация сгенерированная автоматически (Swagger) находится по адресу [http://127.0.0.1/docs](http://127.0.0.1/docs)

## API эндпоинты

`/users/login` - позволяет получить JWT-токен для последующей аутентификации
`/salary` - с использованием JWT-токена позволяет конкретному пользователю получить информацию о его зарплате


## Тестовые данные

В базе данных находятся три тестовых пользователя, формат логин / пароль:
 - 123@123.ru / 123
 - 456@456@.ru / 456
 - 789@789.ru / 789

Для тестирования приложения необходимо сначала залогиниться в приложение, получив JWT-токен, а затем обратиться к эндпоинту `/salary` с этим токеном для получения приватной информации


## Цель создания

Это реализация [тестового задания](https://hub.mos.ru/leksus/api-salary/-/blob/main/SHIFT_ML_Python_TestTask.pdf) на курс Python для ЦФТ ШИФТ
